package cn.uc.vip.common.cache;

import java.util.Collection;
import java.util.Date;
import java.util.Set;

/**
 * 
 * 接口或类的说明: Cache统一接口
 *
 * <br>==========================
 * <br> 公司：优视科技
 * <br> 开发：zhangxx2@ucweb.com
 * <br> 版本：1.0
 * <br> 创建时间：2011-6-7
 * <br>==========================
 * @param <K> Key的类型
 * @param <V> Value的类型
 */
public interface ICache<K, V> {
    /**
     * 保存数据
     * 
     * @param key
     * @param value
     * @return
     */
    public V put(K key, V value);

    /**
     * 保存有有效期的数据
     * 
     * @param key
     * @param value
     * @param 有效期
     * @return
     */
    public V put(K key, V value, Date expiry);

    /**
     * 保存有有效期的数据
     * 
     * @param key
     * @param value
     * @param ttl 数据超时的秒数
     * @return
     */
    public V put(K key, V value, int ttl);

    /**
     * 获取缓存数据
     * 
     * @param key
     * @return
     */
    public V get(K key);

    /**
     * 移出缓存数据
     * 
     * @param key
     * @return
     */
    public boolean remove(K key);

    /**
     * 删除所有缓存内的数据
     * 
     * @return
     */
    public boolean clear();

    /**
     * 缓存数据数量
     * 
     * @return
     */
    public int size();

    /**
     * 缓存所有的key的集合
     * 
     * @return
     */
    public Set<K> keySet();

    /**
     * 缓存的所有value的集合
     * 
     * @return
     */
    public Collection<V> values();

    /**
     * 是否包含了指定key的数据
     * 
     * @param key
     * @return
     */
    public boolean containsKey(K key);

    /**
     * 释放Cache占用的资源
     */
    public void destroy();

    /**
     * key所对应的是一个计数器，实现增加inc的数量
     * @param key
     * @param inc
     * @return
     */
    public long incr(String key, long inc);

    /**
     * key所对应的是一个计数器，实现减少decr的数量
     * @param key
     * @param decr
     * @return
     */
    public long decr(String key, long decr);

    /**
     * key所对应的是一个计数器，实现增加inc的数量
     * @param key
     * @param inc
     * @return
     */
    public long addOrIncr(String key, long inc);

    /**
     * key所对应的是一个计数器，实现减少decr的数量
     * @param key
     * @param decr
     * @return
     */
    public long addOrDecr(String key, long decr);

    /**
     * 存储计数器
     * @param key
     * @param count
     */
    public void storeCounter(String key, long count);

    /**
     * 获取寄存器，-1表示不存在
     * @param key
     */
    public long getCounter(String key);

}